package com.rajaev.dtu.tractor.app.service;

import com.github.pagehelper.PageInfo;

import com.rajaev.dtu.tractor.domain.entity.BatteryPo;
import com.rajaev.dtu.tractor.domain.vo.*;
import com.rajaev.dtu.tractor.infrastructure.base.enums.BatteryWorkStateEnum;
import com.rajaev.dtu.tractor.infrastructure.base.errors.BusinessException;

import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;
import java.util.Optional;

public interface BatteryService {



    List<String> selectVins(String keyword);

    /**
     * 检查该vin是否在电池库中已经存在
     * @param vin
     * @return
     */
    boolean checkVinIsExists(String vin);

    /**
     * 标定（保存） vin
     * @param vin
     */
    void save(String vin) throws BusinessException;

    /**
     * 获取设备目前的工作状态
     * @param vin
     * @return
     */
    BatteryWorkStateEnum getBatteryWorkState(String vin);


    void delete(String vin);


    BatteryMonitorVo selectByVin(String vin);

    /**
     * 根据vin后四位查询匹配的电池列表
     * @param vin4
     * @return
     */
    List<BatteryMonitorVo> selectByLastVin4(String vin4, Integer pageSize, Integer pageNo);

    void batteryLogin(BatteryPo batteryPo,String mac,Date loginTime);

    void batteryLogOut(BatteryPo batteryPo,String mac,Date logoutTime);


    /**
     * 根据后四位查询用户关联的设备vin列表
     * @param vin
     * @return
     */
    List<String> queryVinList(String vin);

    /**
     * 查询客户所有的电池信息
     * @param customerId
     * @return
     */
    List<BatteryMonitorVo> selectByCustomerId(Integer customerId);

    List<BatteryPo> selectUserBatteries(Integer userId);

    List<BatteryMonitorVo> selectBatteriesWithCustomer(Integer userI);


    /**
     * 设置电池状态为合格
     * @param batteryId
     */
    void checkBatteryOk(Integer batteryId) throws BusinessException;

    /**
     *
     * @param batteryId 电池id
      * @param startDate 开始日期（yyyyMMdd）
     * @param endDate 结束日期（yyyyMMdd）
     * @return
     */
    BatteryDailyRuntimeVo selectBatteryDailyRuntimeVo(Integer batteryId, Integer startDate, Integer endDate);


    PageInfo<BatteryBasicVo> pageQueryBattery(BatteryQueryVo batteryQueryVo);

    /**
     * 统计电池数量
     * @return
     */
    Integer batteryCount();



    void editBatteryInfo(Integer batteryId,Integer projectTeamId ,String bz,String plateNo,String deviceManager);



    /**
     * 设置是否允许充电的标识
     * @param vin
     * @param allowCharge
     */
    void updateBatteryAllowCharge(String vin,String allowCharge);

    BatteryBasicVo selectBatteryById(Integer batteryId);



    /**
     * 分页查询电池划拨列表信息
     * @param batteryAllocationQueryVo
     * @return
     */
    PageInfo<BatteryAllocationVo> pageQueryBatteryAllocateInfo(BatteryAllocationQueryVo batteryAllocationQueryVo);


    /**
     * 电池划拨
     * @param customerId
     * @param batteryId
     */
    void batteryAllocate(Integer customerId,Integer batteryId);


    /**
     *  获取车辆的历史轨迹
     * @param vin
     * @param fromDate
     * @param endDate
     * @return
     */
    List<HistoryTrackVo> getHistoryTrack(String vin, Date fromDate, Date endDate, HttpServletResponse response);
}
